IFZ file format infos IFZ is a multi image format container file for raw grayscale and color images. Up to 8 cameras can be saved into one IFZ. (maybe more if using FJ software that allows to connect up to 16 GigE cameras) Cameras might be mixed in resolutions and color/mono Multi IFZ can be concatenated into one. Thus at the end of the first IFZ, you migh find another signature FFFFFFFE etc. Image can be cropped. This reduce the acquisition time and therefore also the IFZ file size. This is described in partial scan section lower. struct IFZHDR { DWORD signature; // FFFFFFFE DWORD cam_dispatch; // 00000001 (useful to know how many IFZ are encoded below) }; struct IMGHDR { DWORD mosaic; // 0000000A DWORD cam_width; // 00000990 = 2448 DWORD cam_height; // 000007FC = 2044 DWORD offsetX; // 00000000 DWORD offsetY; // 00000000 DWORD w; // 00000990 DWORD h; // 000007FC DWORD size8; // 004C59E0 = 5003744 byte size of this image chunk = sizeof(IMGHDR)+w*h }; /*cam_dispatch; 00000001h to 000000FFh = 00000001b to 11111111b each bit of the first byte is a camera connected exemples: 00000001h = 00000001b most of the time when only cam 0 is plugged file contains 1 IFZ 00000003h = 00000011b if cam 0 and cam 1 are plugged file contains 2 IFZ 00000005h = 00000101b if cam 0 and cam 2 are plugged file contains 2 IFZ 00000080h = 10000000b if only cam7 is plugged file contains 1 IFZ 000000FFh = 11111111b if all cam are plugged file contains 8 IFZ */ /* mosaic 0000000A (10) 8-bit grayscale image 00000065 (101) RG-GB mosaic 00000066 (102) GR-BG mosaic 00000067 (103) BG-GR mosaic 00000068 (104) GB-RG mosaic All monochrome camera have mosaic code 0A FHV7H-C032 has mosaic code 101 FH-SC05R has mosaic code 102 FZ-SQ050F has mosaic code 103 FH-SC21R has mosaic code 104 */ /*partial scan; some cameras support partial scan, most of the time only in y direction, but some support in both direction (FQ2-S45-13 for example) Partial scan is defined by offsetX, offsetY and w, h Pixels outside this area are all black. */ for multi IFZ (following DWORDs are byte swapped) Header is @00000000 FEFFFFFF Signature @00000004 03000000 cam_dispatch (up to 8) 01 to FF header first image @00000008 0A000000 first image MOZAIC code @0000000C 80020000 first camera width @00000010 E1010000 first camera height @00000014 00000000 first image X offset @00000018 00000000 first image Y offset @0000001C 80020000 first image width @00000020 E1010000 first image height @00000024 20B00400 IFZ Size (including image header). thus next image will be at current image adress @00000008 + 0004B020h (=307232dec) = @0004B028 DATA image 1 header second image @0004B028 0A000000 second image MOZAIC code @0004B02C 80020000 second camera width @0004B030 E1010000 second camera height @0004B034 00000000 second image X offset @0004B038 00000000 second image Y offset @0004B03C 80020000 second image width @0004B040 E1010000 second image height @0004B044 20B00400 IFZ Size (including image header). thus next image will be at current image adress @0004B028 + 0004B020h (=307232dec) = @00096048 DATA image 2 header third image @00096048 0A000000 third image MOZAIC code @0009604C 80020000 third camera width @00096050 E1010000 third camera height @00096054 00000000 third image X offset @00096058 00000000 third image Y offset @0009605C 80020000 third image width @00096060 E1010000 third image height @00096064 20B00400 IFZ Size (including image header). thus next image will be at current image adress @00096048 + 0004B020h (=307232dec) = @000E1068 DATA image 3 etc. The number of cameras and thus (IMGHDR+data) can be calculated using C++20 std::popcount() or gcc's __builtin_popcount(). The number of concatenated “inputs” can only be detected using file size. Each “input” starts with IFZHDR.